#include <iostream>
#include <cstring>

long long const mo = 1000000007;
long long n,m;

long long quick_mod(long long a, long long b)
{
	long long ans = 1;
	a %= mo;
	while(b)
	{
		if(b & 1)
		{
			ans = ans * a % mo;
			b--;
		}
		b >>= 1;
		a = a * a % mo;
	}
	return ans;
}

long long C(long long n, long long m)
{
	if(m > n) return 0;
	long long ans = 1;
	for(int i=1; i<=m; i++)
	{
		long long a = (n + i - m) % mo;
		long long b = i % mo;
		ans = ans * (a * quick_mod(b, mo-2) % mo) % mo;
	}
	return ans;
}

long long lucas(long long n, long long m)
{
	if(m == 0) return 1;
	return C(n % mo, m % mo) * lucas(n / mo, m / mo) % mo;
}

int main()
{
	std::ios::sync_with_stdio(false);
	while(std::cin >> n >> m) {
		if (n == 1 && m == 1) {
			std::cout << "1\n";
			continue;
		} else if (n == 1 || m == 1) {
			std::cout << "0\n";
			continue;
		}
		n--; m--;
		long long tn = n + m - 1;
		long long tm = m;
		std::cout << lucas(tn - 1, tm - 1) << '\n';
	}
}
